import type { Equal, Expect } from '@type-challenges/utils'

export type GetReadonlyKeys<T extends Object> = keyof {[
    P in keyof T as Equal<{[P1 in P]:T[P1]},{readonly [P1 in P]:T[P1]}> extends true?P:never
]:1}

// P1 in P 不好理解
// in用于取联合类型的值。主要用于数组和对象的构造。

// 但切记不要用于 interface，否则会出错

// type name = 'firstName' | 'lastName';
// type TName = {
//   [key in name]: string;
// };

//   interface Todo1 {
//     readonly title: string
//     description: string
//     completed: boolean
//   }
  
// type t = GetReadonlyKeys<Todo1>